package 剑指Offer.medium;

public class 数组中数字出现的次数 {
    class Solution {
        public int[] singleNumbers(int[] nums) {
            int xor = 0;
            for (int num : nums) {
                xor ^= num;
            }

            int mask = 1;
            //异或结果中至少有一位为1，找到从右至左的第一位即可
            while ((xor & mask) == 0) {
                mask <<=1;
            }

            int xorA = 0, xorB = 0;
            for (int num : nums) {
                if ((num & mask) == 1) {
                    xorA ^= num;
                } else {
                    xorB ^= num;
                }
            }
            return new int[]{xorA, xorB};
        }
    }
}
